//
// Created by host on 8/6/25.
//

#ifndef DATA_STRUCTURE_H
#define DATA_STRUCTURE_H

#include <Eigen/Core>

namespace ZORAL
{

#define WORKSPACE_DIM 6
#define TRANS_DIM 3
#define ROT_DIM 3
#define ROT_MATRIX_DIM 9

    enum IKSolveType
    {
        ANALYTICAL = 1,
        ANA_SAMPLE = 2,
    };


    struct IKConfig
    {
        IKSolveType type;
        double arm_angle;
        int global_config;
        Eigen::VectorXd q_last;
    };


    enum PlanMethod
    {
        MOVE_JOINT = 1,
        MOVE_POSE = 2,
        MOVE_LINE = 3,
        MOVE_NULLSPACE = 4,
        MOVE_CIRCLE = 5,
    };

    enum PlannerType
    {
        FIVE_POLY_INTERP = 1,
        TIME_OPTIMAL_GEORGIA = 2,
    };

    struct PlannerProperties
    {
        PlannerType type;
        Eigen::VectorXd max_velocity;
        Eigen::VectorXd max_acceleration;
        Eigen::VectorXd max_jerk;
        double min_move_time;
        double sample_rate;
        double max_derivation;
    };

    // struct CartesianPlannerProperties
    // {
    //     PlannerType type;
    //     Eigen::Vector3d max_velocity;
    //     Eigen::Vector3d max_acceleration;
    //     Eigen::Vector3d max_jerk;
    //     double min_move_time;
    //     double sample_rate;
    //     double max_derivation;
    // };


}


#endif //DATA_STRUCTURE_H
